Conversation
c25092b to
2312c9d
Compare
|
@uenoku cc |
2312c9d to
68773b2
Compare
uenoku
left a comment
There was a problem hiding this comment.
Probably we should add an operation instead of adding optional operand because we could break existing delay op's semantics.
Ok, this way seems better, i will change the RFC first and then redo this pr's commits. |
206be23 to
8495815
Compare
|
@uenoku cc |
|
@fabianschuiki cc pls 👀 |
|
I'm curious as to why this is totally necessary, won't this create semantic issues when paired with assert-property style things (so lowerings that yield |
The initial issue came from #8673, and its main purpose was to ensure that IR (In-Relational Analysis) had clear semantic relationships when analyzing clocks.
Good question. The current In the follow-up PR (PR2: InferLTLClocks),
That said, you're right that |
|
Hi @uenoku @dobios @fabianschuiki, just wanted to gently bump this. I've updated the PR based on the feedback from last week. I know everyone is busy, but could you let me know if these changes look correct or if there's anything else needed before we move forward with the next steps in this new direction? Thanks! |
8495815 to
6df0ece
Compare
|
@uenoku @dobios @fabianschuiki, hello, it's been about a month and a half since the last update on this PR. I have follow-up PRs ready but they are currently blocked on this one, so I'd like to move this forward as soon as possible. Do you have any remaining concerns about the explicit clocked delay approach? As visible in this PR, explicit clocked delays will significantly improve CIRCT's multi-clock capabilities and enhance LTL's expressiveness. I'm ready to act on any feedback immediately, I'd love to hear your thoughts. |
- Move ClockEdgeAttr and ClockOp definitions before the Sequences section so they can be referenced by sequence operations. - Add new ClockedDelayOp for explicitly clocked delays with mandatory clock and edge parameters. Syntax: clocked_delay clock, edge, input, delay[, length]. - Simplify DelayOp to be purely unclocked (remove implicit clock support). - Add ClockedDelayOp to LTL Visitor TypeSwitch for downstream consumers. - Update DelayOp documentation to clarify unclocked semantics.
- Add SameClockAndEdge constraint for matching clocked delay pairs. - Add NestedClockedDelays pattern: merge nested clocked delays with same clock/edge into a single delay. - Add MoveClockedDelayIntoConcat pattern for canonicalization. - Add MergeNestedClockedDelays C++ canonicalization pattern. - Use shared foldDelayLike<> template for both DelayOp and ClockedDelayOp.
- Document ClockedDelayOp syntax, semantics, and examples in LTL.md. - Update DelayOp docs to clarify purely unclocked semantics. - Add ClockedDelayOp roundtrip tests to basic.mlir. - Update canonicalization.mlir for ClockedDelayOp fold patterns.
|
Hey @Clo91eaf, sorry for the delay on reviews here - I think it's a busy time for a lot of the wider infrastructure right now so I guess this slipped between the cracks. I've just finished up making a similar change to ltl.past, so it would be great to get this through so we can clean up the dicey user-defined-semantics that the ltl.clock op introduces! This looks like quite a big diff for the first PR in this chain, which might be part of the slow reviews (time-to-review increases superlinearly with PR length IMO) - could I suggest you trim this PR down to just the definition of the new operation, and then add things like folds and docs in smaller follow-up PRs? This should speed up the review process a lot as there's much less context to digest. If you're happy with that then ping me once the PR is updated and I'll get it reviewed as soon as I can so we can clean up all these clock semantics! |
This PR is the first step of the explicit-delay stack.
Create a new operation of
ltl.clocked_delayExample:
This pr is participated with @Claude-opus-4.6 and reviewed by myself